package cn.skylark.wcm.service.impl;

import cn.skylark.wcm.dao.TenanDao;
import cn.skylark.wcm.entity.Tenan;
import cn.skylark.wcm.service.TenanService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.util.StringUtil;

import java.util.List;

@Service
public class TenanServiceImpl implements TenanService {
    /**
     * logger
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(TenanServiceImpl.class);
    @Autowired
    public TenanDao tenanDao;

    /**
     * 新增租户
     * 业务：增加租户数据
     *
     * @param tenan
     * @return
     */
    @Override
    public boolean addTenan(Tenan tenan) {
        LOGGER.info("新增租户开始 租户=" + tenan);
        tenan.setDelflg(0);
        Long oldstorage = tenan.getStorage();
        Long newStorage = oldstorage * 1024 * 1024;
        tenan.setStorage(newStorage);
        boolean bool = tenanDao.insert(tenan) > 0;

        LOGGER.info("新增租户结束");
        return bool;
    }

    /**
     * 通过分页查询租户列表
     * 该该分页函数是直接查找tenan的所有数据返回，delflg为0的 让谁看是通过shiro来控制的
     * 搜索的查询条件，只提供了通过tenanname模糊查询
     *
     * @param tenan
     * @param start
     * @param length
     * @return
     */
    @Override
    public PageInfo<Tenan> selectByPage(Tenan tenan, String flag, String searchValue, int start, int length) {
        LOGGER.info("通过分页查询租户列表开始 租户=" + tenan + "用户状态" + flag + "启始页=" + start + "条数=" + length);
        int page = start / length + 1;
        Example example = new Example(Tenan.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtil.isNotEmpty(searchValue)) {
            criteria.andLike("tenanname", "%" + searchValue + "%");
        }
        if ("0".equals(flag)) {
            criteria.andEqualTo("delflg", 0);
            criteria.andEqualTo("id", tenan.getId());
        } else if ("1".equals(flag)) {
            criteria.andEqualTo("delflg", 0);
        }
        // 分页查询
        PageHelper.startPage(page, length);
        List<Tenan> tenanList = tenanDao.selectByExample(example);
        LOGGER.info("通过分页查询租户列表结束");
        return new PageInfo<>(tenanList);
    }

    /**
     * 通过租户名称查看租户是否存在
     * 业务：通过tenan查看是否能搜索到租户信息
     *
     * @param tenan
     * @return 有返回值表示租户已存在
     */
    @Override
    public Integer selectByTenanname(Tenan tenan) {
        LOGGER.info("通过租户名称查看租户日否存在开始 租户=" + tenan);
        Integer count = tenanDao.selectCount(tenan);
        LOGGER.info("通过租户名称查看租户日否存在结束");
        return count;
    }

    /**
     * 删除租户
     * 业务：将租户的delflg值改为1
     *
     * @param tenanid
     */
    @Override
    public void delTenan(Integer tenanid) {
        LOGGER.info("删除租户开始 租户id=" + tenanid);
        Tenan tenan = new Tenan();
        tenan.setId(tenanid);
        tenan.setDelflg(1);
        tenanDao.deleteTenan(tenan);
        LOGGER.info("删除租户结束");
    }

    /**
     * 获取租户信息
     * 通过租户信息获取租户
     *
     * @param tenan
     * @return
     */
    @Override
    public Tenan getTenanByOne(Tenan tenan) {
        LOGGER.info("获取租户信息开始 租户信息" + tenan);
        Tenan tenanPropery = tenanDao.selectOne(tenan);
        LOGGER.info("获取租户信息结束");
        return tenanPropery;
    }

    /**
     * 获取储空间大小
     * 业务：通过id获取存储空间
     *
     * @param tenanid 租户id
     * @return
     */
    @Override
    public Tenan getStorageById(Integer tenanid) {
        LOGGER.info("获取储空间大小开始 租户id" + tenanid);
        Tenan tenan = new Tenan();
        tenan.setId(tenanid);
        tenan.setDelflg(0);
        Tenan tenanMessage = tenanDao.selectOne(tenan);
        LOGGER.info("获取储空间大小结束");
        return tenanMessage;
    }

    /**
     * 更改租户属性
     * 业务：在新建租户的时候是没有用户id的，新建结束后要
     * 向租户中天健用户id
     *
     * @param tenan
     */
    @Override
    public void updateTenan(Tenan tenan) {
        LOGGER.info("更改租户属性开始 用户id" + tenan.getUserid());
        tenanDao.updateTenan(tenan);
        LOGGER.info("更改租户属性开始结束");
    }
}
